// InitFunctionReader.cpp: implementation of the InitFunctionReader class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "InitFunctionReader.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

IMPLEMENT_DYNAMIC_CREATE(InitFunctionReader, PartDBReader, FunctionObject::eINITFUNCTION);

InitFunctionReader::InitFunctionReader()
{

}

InitFunctionReader::~InitFunctionReader()
{

}

FunctionObject* InitFunctionReader::Reader(const _RecordsetPtr& rs)
{
	FunctionObject* pObject = PartDBReader::CreateObject(rs);
	ASSERT(pObject);

	ASSERT(pObject->IsKindOf(RUNTIME_CLASS_EX(InitFunction)));

	InitFunction* pFun = static_cast<InitFunction*>(pObject);
	CString strTemp;
	strTemp = this->GetString(1, rs);
	ASSERT(!strTemp.IsEmpty());

	INT nNum = atoi(strTemp);

	for(int i = 0; i < nNum; i++)
	{
		strTemp = this->GetString(i+2, rs);
		ASSERT(!strTemp.IsEmpty());
		Parser(strTemp, pFun);
	}
	return pFun;
}

void InitFunctionReader::Parser(const CString& strTemp, InitFunction* pFun)
{
	ASSERT(!strTemp.IsEmpty());
	ASSERT(pFun);

	CString strSymbol;
	CString strValue;

	BOOL bIsSymbo = TRUE;
	for(int i = 0; i < strTemp.GetLength(); i++)
	{
		if(bIsSymbo)
		{
			if(strTemp.GetAt(i) != _T(','))
			{
				strSymbol += strTemp.GetAt(i);
			}
			else
			{
				bIsSymbo = FALSE;
			}
		}
		else
		{
			strValue += strTemp.GetAt(i);
		}
	}
	
	ASSERT(!strSymbol.IsEmpty());
	ASSERT(!strValue.IsEmpty());

	pFun->Add(strSymbol, strValue);
}